class MyIterator:
    def __init__(self, collection):
        self._collection = collection  # 存储集合数据的引用
        self._index = 0  # 初始化索引，控制当前访问位置

    def __iter__(self):
        return self  # 返回迭代器实例自身

    def __next__(self):
        if self._index < len(self._collection):
            item = self._collection[self._index]  # 获取当前元素
            self._index += 1  # 移动到下一个索引位置
            return item  # 返回当前元素
        else:
            raise StopIteration  # 数据遍历完成，抛出StopIteration异常


class MyIterable:
    def __init__(self, data):
        self._data = data  # 存储数据的内部结构

    def __iter__(self):
        return MyIterator(self._data)  # 返回一个迭代器对象，封装了数据和遍历逻辑


# 使用迭代器模式遍历
iterable = MyIterable([1, 2, 3, 4, 5])  # 创建一个可迭代对象
for item in iterable:
    print(item)  # 输出: 1 2 3 4 5
